/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Tarea1;

/**
 *
 * @author manuel
 * Clase encargada de hacerle las consultas y devolver resultados a la base de datos
 */

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ManejoBD {
    
    private Connection conexion;
    
    public ManejoBD() {
        conexion = null;
        
    }
    
    /*
     * Metodo encargado de agregar un producto a la base de datos
     */
    public String agregaProducto(Producto producto) {
        try {
            
            PreparedStatement instruccionAgregaProducto = conexion.prepareStatement(
                    Constantes.INSERCION_PRODUCTO);
            
            instruccionAgregaProducto.setString(1, producto.getCodigo());
            instruccionAgregaProducto.setString(2, producto.getDescripcion());
            instruccionAgregaProducto.setLong(3, producto.getPrecio());
            instruccionAgregaProducto.setInt(4, producto.getcantidad());
            
            instruccionAgregaProducto.executeUpdate();    
            instruccionAgregaProducto.close();
            
            
        } catch (Exception ex) {
            return Constantes.RESPUESTA_ESTADO_ERROR;
        }
        return Constantes.RESPUESTA_ESTADO_EXITO;
    }
    
    /*
     * Metodo encargado de establecer la conexion por medio de la clase ConexionBD
     */
    public void conectarBD() {
        conexion = ConexionBD.getConnection();
    }
    
    
    /*
     * Metodo encargado de seleccionar los productos y retornar un objeto producto
     */
    public Producto seleccionaProducto(String codigo) {
        PreparedStatement instruccion = null;
        Producto productoSeleccionado= new Producto();
        
        try {
            
            instruccion = conexion.prepareStatement(Constantes.SELECCIONA_PRODUCTO);
            
            instruccion.setString(1, codigo);
            ResultSet result = instruccion.executeQuery();
            
            while (result.next()) {
                productoSeleccionado.setCodigo(result.getString(1));
                productoSeleccionado.setDescripcion(result.getString(2));
                productoSeleccionado.setPrecio(result.getLong(3));
                productoSeleccionado.setCantidad(result.getInt(4));
            }
        } catch (Exception ex) {
            System.out.println(ex);
        } finally {
            
            if (instruccion != null) {
                try {
                    instruccion.close();
                } catch (SQLException sqlEx) {
                } // ignore

                instruccion = null;
            }
        }
        return productoSeleccionado;
    }

    /*
     * Metodo encargado de borrar un producto de acuerdo a su codigo
     */
    public String borraProducto( String codigo){
        PreparedStatement instruccion = null;
        
        try {
            
            instruccion = conexion.prepareStatement(Constantes.ELIMINA_PRODUCTO);
            
            
            instruccion.setString(1, codigo);

            instruccion.executeUpdate();
        } catch (Exception ex) {
            return Constantes.RESPUESTA_ESTADO_ERROR;
        } finally {
            
            if (instruccion != null) {
                try {
                    instruccion.close();
                } catch (SQLException sqlEx) {
                } // ignore

                instruccion = null;
            }
        }
        return Constantes.RESPUESTA_ESTADO_EXITO;
    }
    
    /*
     * Metodo que modifica un producto ya existente
     */
        public String modificaProducto(Producto producto) {
        try {
            
            PreparedStatement instruccionModificaProducto = conexion.prepareStatement(
                    Constantes.MODIFICA_PRODUCTO);
            
            instruccionModificaProducto.setString(1, producto.getDescripcion());
            instruccionModificaProducto.setLong(2, producto.getPrecio());
            instruccionModificaProducto.setInt(3, producto.getcantidad());
            instruccionModificaProducto.setString(4, producto.getCodigo());
            System.out.println(instruccionModificaProducto.toString());
            
            instruccionModificaProducto.executeUpdate();    
            instruccionModificaProducto.close();
            
            
        } catch (Exception ex) {
            return Constantes.RESPUESTA_ESTADO_ERROR;
        }
        return Constantes.RESPUESTA_ESTADO_EXITO;
    }
}